﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

namespace TangoFamilyAndGuide.Site
{
    public partial class ExploradorMilonga : System.Web.UI.Page
    {
        List<Entidades.Milonga> milonga = new List<Entidades.Milonga>();
        protected void Page_Load(object sender, EventArgs e)
        {
            Entidades.Sesion sesion;
            if (!IsPostBack)
            {
                if (Funciones.SessionTimeOut(Session))
                {
                    Response.Redirect("~/SessionTimeout.aspx");
                }
                else
                {
                    sesion = (Entidades.Sesion)Session["Sesion"];
                    DataBind();
                }
                NombreRadioButton.Checked = true;
                TipoBusquedaRadioButton_CheckedChanged(NombreRadioButton, new EventArgs());
                NombreTextBox.Focus();
            }
            sesion = (Entidades.Sesion)Session["Sesion"];
            List<Entidades.Permiso> permisoAdminSITEActive = sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
            {
                return p.TipoPermiso.Id == "AdminSITE";
            });
            if (permisoAdminSITEActive.Count == 0)
            {
                Response.Redirect("~/Home.aspx");
            }
        }
        protected void MilongaPagingGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            try
            {
                DesSeleccionarFilas();
                MilongaPagingGridView.PageIndex = e.NewPageIndex;
                List<Entidades.Milonga> lista;
                int CantidadFilas = 0;
                if (IdMilongaRadioButton.Checked)
                {
                    lista = RN.Milonga.ListaPorIdMilonga(Convert.ToInt32(IdMilongaTextBox.Text), false, (Entidades.Sesion)Session["Sesion"]);
                    CantidadFilas = lista.Count;
                }
                else
                {
                    lista = RN.Milonga.Lista(out CantidadFilas, MilongaPagingGridView.PageIndex, MilongaPagingGridView.PageSize, MilongaPagingGridView.OrderBy, NombreTextBox.Text, PaisTextBox.Text, "", "", "", Session.SessionID, (Entidades.Sesion)Session["Sesion"]);
                }
                MilongaPagingGridView.VirtualItemCount = CantidadFilas;
                ViewState["lista"] = lista;
                MilongaPagingGridView.DataSource = lista;
                MilongaPagingGridView.DataBind();
            }
            catch (System.Threading.ThreadAbortException)
            {
                Trace.Warn("Thread abortado");
            }
            catch (Exception ex)
            {
                //CedeiraUIWebForms.Excepciones.Redireccionar(ex, "~/Excepcion.aspx");
                MensajeLabel.Text = ex.Message;
            }
        }
        protected void MilongaPagingGridView_Sorting(object sender, GridViewSortEventArgs e)
        {
            try
            {
                DesSeleccionarFilas();
                List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
                int CantidadFilas = 0;
                lista = RN.Milonga.Lista(out CantidadFilas, MilongaPagingGridView.PageIndex, MilongaPagingGridView.PageSize, MilongaPagingGridView.OrderBy, NombreTextBox.Text, PaisTextBox.Text, "", "", "", Session.SessionID, (Entidades.Sesion)Session["Sesion"]);
                ViewState["lista"] = lista;
                MilongaPagingGridView.DataSource = (List<Entidades.Milonga>)ViewState["lista"];
                MilongaPagingGridView.DataBind();
            }
            catch (System.Threading.ThreadAbortException)
            {
                Trace.Warn("Thread abortado");
            }
            catch (Exception ex)
            {
                //CedeiraUIWebForms.Excepciones.Redireccionar(ex, "~/Excepcion.aspx");
                MensajeLabel.Text = ex.Message;
            }
        }
        protected void MilongaPagingGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes["onmouseover"] = "this.style.cursor='hand';this.style.textDecoration='underline';";
                e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
                
                //Color por estado distinto a Active
                if (e.Row.Cells[7].Text != "Active")
                {
                    e.Row.ForeColor = Color.Red;
                }
                DropDownList ddlTipoDestacado = (DropDownList)e.Row.FindControl("ddlTipoDestacado");
                if (ddlTipoDestacado != null)
                {
                    ddlTipoDestacado.DataSource = Entidades.TiposDestacado.TipoDestacado.ListaMasSinInformar();
                    ddlTipoDestacado.DataBind();
                    ddlTipoDestacado.SelectedValue = MilongaPagingGridView.DataKeys[e.Row.RowIndex].Values[0].ToString();
                }
            }
        }
        private void DesSeleccionarFilas()
        {
            MilongaPagingGridView.SelectedIndex = -1;
        }

        protected void MilongaPagingGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int item = Convert.ToInt32(e.CommandArgument);
            List<Entidades.Milonga> lista = (List<Entidades.Milonga>)ViewState["lista"];
            Entidades.Milonga milonga = lista[item];
            switch (e.CommandName)
            {
                case "Detalle":
                    Session["Milonga"] = milonga;
                    Response.Redirect("~/MilongaGuideConsultaDetallada.aspx");
                    break;
                case "CambiarEstado":
                    Session["Milonga"] = milonga;
                    Entidades.Evento Evento;
                    RN.Milonga.EventoPosible(out Evento, milonga, (Entidades.Sesion)Session["Sesion"]);
                    TituloConfirmacionLabel.Text = "Confirmar " + Evento.DescrEvento;
                    NombreLabel.Text = milonga.Nombre;
                    DescripcionLabel.Text = milonga.Descripcion;
                    PaisLabel.Text = milonga.Pais;
                    ProvinciaLabel.Text = milonga.Provincia;
                    LocalidadLabel.Text = milonga.Localidad;
                    EstadoLabel.Text = milonga.WF.Estado;
                    UsuarioLabel.Text = milonga.Usuario.Id;
                    ViewState["Milonga"] = milonga;
                    ModalPopupExtender1.Show();
                    break;
            }
        }
        protected void MilongaPagingGridView_RowEditing(object sender, GridViewEditEventArgs e)
        {
            MilongaPagingGridView.EditIndex = e.NewEditIndex;
            MilongaPagingGridView.DataSource = ViewState["lista"];
            MilongaPagingGridView.DataBind();
        }
        protected void MilongaPagingGridView_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            MilongaPagingGridView.EditIndex = -1;
            MilongaPagingGridView.DataSource = ViewState["lista"];
            MilongaPagingGridView.DataBind();
        }
        protected void MilongaPagingGridView_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                List<Entidades.Milonga> milongas = ((List<Entidades.Milonga>)ViewState["lista"]);
                Entidades.Milonga milongaActual = RN.Milonga.ObtenerCopia(milongas[e.RowIndex]); 
                Entidades.Milonga milonga = milongas[e.RowIndex];

                string ranking = ((TextBox)MilongaPagingGridView.Rows[e.RowIndex].FindControl("txtRanking")).Text;
                string tipoDestacado = ((DropDownList)MilongaPagingGridView.Rows[e.RowIndex].FindControl("ddlTipoDestacado")).SelectedValue;
                if (ranking != string.Empty)
                {
                     milonga.Ranking = Convert.ToInt32(ranking);
                }
                else
                {
                    throw new Exception("Debe informar el ranking. No puede estar vacío.");
                }
                milonga.TipoDestacado = tipoDestacado;
                RN.Milonga.Modificar(milongaActual, milonga, (Entidades.Sesion)Session["Sesion"]);
                MilongaPagingGridView.EditIndex = -1;
                MilongaPagingGridView.DataSource = ViewState["lista"];
                MilongaPagingGridView.DataBind();
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + ex.Message.ToString().Replace("'", "") + "');</SCRIPT>", false);
            }
        }
        protected void MilongaPagingGridView_SelectedIndexChanged(object sender, EventArgs e)
        {
        }

        protected void MilongaPagingGridView_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
        }

        protected void CambiarEstadoButton_Click(object sender, EventArgs e)
        {
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                try
                {
                    Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                    Entidades.Milonga milonga = (Entidades.Milonga)ViewState["Milonga"];
                    Entidades.Evento Evento;
                    RN.Milonga.EventoPosible(out Evento, milonga, sesion);
                    RN.Milonga.CambiarEstado(milonga, Evento.Id, Evento.EstadoHst, sesion);
                    BuscarButton_Click(BuscarButton, new EventArgs());
                    Funciones.PersonalizarControlesMaster(Master, true, sesion);
                }
                catch (Exception ex)
                {
                    MensajeLabel.Text = "Problemas al cambiar el estado de la Milonga." + ex.Message;
                }
            }
        }
        protected void BuscarButton_Click(object sender, EventArgs e)
        {
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                MensajeLabel.Text = String.Empty;
                List<Entidades.Milonga> lista = new List<Entidades.Milonga>();
                int CantidadFilas = 0;
                if (IdMilongaRadioButton.Checked)
                {
                    if (IdMilongaTextBox.Text == string.Empty)
                    {
                        MensajeLabel.Text = "No se han encontrado Milongas que satisfagan la busqueda";
                    }
                    else
                    {
                        lista = RN.Milonga.ListaPorIdMilonga(Convert.ToInt32(IdMilongaTextBox.Text), false, (Entidades.Sesion)Session["Sesion"]);
                        CantidadFilas = lista.Count;
                    }
                }
                else
                {
                    lista = RN.Milonga.Lista(out CantidadFilas, MilongaPagingGridView.PageIndex, MilongaPagingGridView.PageSize, MilongaPagingGridView.OrderBy, NombreTextBox.Text, PaisTextBox.Text, "", "", "", Session.SessionID, (Entidades.Sesion)Session["Sesion"]);
                }
                if (MensajeLabel.Text == "")
                {
                    MilongaPagingGridView.VirtualItemCount = CantidadFilas;
                    ViewState["lista"] = lista;
                    //Grilla
                    MilongaPagingGridView.DataSource = lista;
                    MilongaPagingGridView.DataBind();
                    if (lista.Count == 0)
                    {
                        MilongaPagingGridView.DataSource = null;
                        MilongaPagingGridView.DataBind();
                        MensajeLabel.Text = "No se han encontrado Milongas que satisfagan la busqueda";
                    }
                }
            }
        }
        protected void TipoBusquedaRadioButton_CheckedChanged(object sender, EventArgs e)
        {
            MilongaPagingGridView.DataSource = null;
            MilongaPagingGridView.DataBind();
            MensajeLabel.Text = String.Empty;
            if (IdMilongaRadioButton.Checked)
            {
                NombreTextBox.Text = String.Empty;
                PaisTextBox.Text = String.Empty;
                NombreTextBox.Visible = false;
                PaisTextBox.Visible = false;

                IdMilongaTextBox.Visible = true;
            }
            else if (NombreRadioButton.Checked)
            {
                IdMilongaTextBox.Text = String.Empty;
                PaisTextBox.Text = String.Empty;
                IdMilongaTextBox.Visible = false;
                PaisTextBox.Visible = false;

                NombreTextBox.Visible = true;
            }
            else
            {
                IdMilongaTextBox.Text = String.Empty;
                NombreTextBox.Text = String.Empty;
                IdMilongaTextBox.Visible = false;
                NombreTextBox.Visible = false;

                PaisTextBox.Visible = true;
            }
        }
    }
}